//
//  ViewController.m
//  UIKit_Sketch
//
//  Created by 李竞 on 16/1/22.
//  Copyright © 2016年 lionjing. All rights reserved.
//

#import "ViewController.h"

//枚举类型本质上就是整数,定义的是偶,如果只指定了第一个数值,后续的数字会依次递增
//枚举类型是解决莫名其妙数字比较常用的手段
typedef enum {
    kMovingDirTop = 1,
    kMovingDirBottom,
    kMovingDirLeft,
    kMovingDirRight,
    kMovingDirRotateleft,
    kMovingDirRotateRight,
    kMovingDirMinus,
    kMovingDirPlus,
} kMovingDir;

#define kMovingDelta 10

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIButton *iconBtn;

@end

@implementation ViewController

/***
   修改位置可以用frame , 在OC中,不允许直接修改对象的结构体属性的成员 , 但是允许修改结构体属性的成员.
 //    通过frame 来实现 ,要想很好的使用动画,那么UIView 的frame 属性可以当做是只读的,动画效果是受影响的;
 //    而如果要想使用frame 来实现UIView 的动画效果,那么,最好不要使用autolayout , 也就是不再使用约束.

 */

- (IBAction)btnClick:(UIButton *)sender {

    //方式1 :通过改变frame 来实现 :
//    [self useFrameToDo:sender];

    //方式2 :通过改变transform来实现 :
    [self useTransformToDo:sender];

}

-(void)useFrameToDo:(UIButton *)sender{

    //如果要修改对象的结构体属性,需要三步 :
    //1.取出frame :
    CGRect frame = self.iconBtn.frame ;
    //2.修改结构体的成员 :
    switch (sender.tag) {
        case kMovingDirTop:
            frame.origin.y -= kMovingDelta ; break;//上
        case kMovingDirBottom:
            frame.origin.y += kMovingDelta ; break;//下
        case kMovingDirLeft:
            frame.origin.x -= kMovingDelta ; break;//左
        case kMovingDirRight:
            frame.origin.x += kMovingDelta ; break;//右
        case kMovingDirRotateleft:
            break;//逆
        case kMovingDirRotateRight:
            break;//顺
        case kMovingDirMinus:
            frame.size.width -= kMovingDelta ;
            frame.size.height -= kMovingDelta ;
            break;//小
        case kMovingDirPlus:
            frame.size.width += kMovingDelta ;
            frame.size.height += kMovingDelta ;
            break;//大
        default: break;
    }

    //3.重新为对象的结构体属性赋值 :
    //    添加动画 :
    // 1.首尾式动画 :
    [UIView beginAnimations:nil context:nil]; //准备开始一个动画
    [UIView setAnimationBeginsFromCurrentState:0.25];//设置动画时常
    // 重新设置bounds
    self.iconBtn.frame = frame ;
    NSLog(@"%@",self.iconBtn);
    [UIView commitAnimations];//提交动画

}

-(void)useTransformToDo:(UIButton *)sender{

    /**
      a:缩放比例
      b:
      c:
      d:缩放比例
     dx:位置
     dy:位置
     
     
     */

    // 首尾式动画 :很奇怪的是为什么开启动画之后,会一抖一抖的
    [UIView beginAnimations:nil context:nil]; //准备开始一个动画
    [UIView setAnimationBeginsFromCurrentState:0.25];//设置动画时常

    switch (sender.tag) {
        case kMovingDirTop:
            self.iconBtn.transform = CGAffineTransformTranslate(self.iconBtn.transform, 0, -kMovingDelta);
            ; break;//上
        case kMovingDirBottom:
            self.iconBtn.transform = CGAffineTransformTranslate(self.iconBtn.transform, 0, kMovingDelta);
            ; break;//下
        case kMovingDirLeft:
            self.iconBtn.transform = CGAffineTransformTranslate(self.iconBtn.transform, -kMovingDelta, 0);
            ; break;//左
        case kMovingDirRight:
            self.iconBtn.transform = CGAffineTransformTranslate(self.iconBtn.transform, kMovingDelta, 0);
            ; break;//右
        case kMovingDirRotateleft:
            self.iconBtn.transform = CGAffineTransformRotate(self.iconBtn.transform, -M_PI_4);
            ;break;//逆
        case kMovingDirRotateRight:
            self.iconBtn.transform = CGAffineTransformRotate(self.iconBtn.transform, M_PI_4);
            ;break;//顺
        case kMovingDirMinus:
            self.iconBtn.transform = CGAffineTransformScale(self.iconBtn.transform, 0.95, 0.95);
            ;break;//小
        case kMovingDirPlus:
            self.iconBtn.transform = CGAffineTransformScale(self.iconBtn.transform, 1.05, 1.05);
            ;break;//大
        default: break;
    }

    [UIView commitAnimations];//提交动画

   }


@end
